package com.itheima.interceptor;

import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 包名:com.itheima.interceptor
 * 作者:Leevi
 * 日期2020-02-21  09:08
 * 拦截器的编写流程:
 * 1. 写一个类，实现HandlerInterceptor接口，并且重写方法
 *    方法1(重点): preHandle()方法，是在请求到达Controller之前执行
 *          该方法返回true，表示放行，该方法返回false表示拦截
 *    方法2: postHandle()方法，在请求被Controller处理完之后执行
 *    方法3: afterCompletion()方法，在响应显示视图之后执行
 *
 * 2. 在springmvc的配置文件中，配置拦截器
 */
public class MyInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("请求到达了拦截器...");
        //当请求被拦截器所拦截，那么我们就要跳转到error.jsp页面
        //response.sendRedirect("/error.jsp");

        System.out.println("preHandle 执行了...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle 执行了...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("afterCompletion 执行了...");
    }
}
